import express from 'express'
import validatorMiddleware from '../middleware/validator.js'
import { body, query } from 'express-validator'
import { isEmpty } from '../utils/index.js'

import {
  getMenuList,
  createMenu,
  updateMenu,
  deleteMenu,
  getPermissionByRoleId,
  getPermissionListByUserId
} from '../controllers/menuController/index.js'

const router = express.Router()

const validator = validatorMiddleware([
  body('menuName').custom((value, { req }) => {
    // 系统，按钮 都没有这个值
    if ([3, 4].includes(req.body.menuType) && !value) return true

    if (!value || !value.trim()) throw new Error('menuName 不能为空')

    return true
  }),
  body('menuOrder').notEmpty().withMessage('排序不能为空').isNumeric().withMessage('只能输入数字'),
  body('menuType')
    .notEmpty()
    .withMessage('菜单类型不能为空')
    .isIn([1, 2, 3, 4, 5])
    .withMessage('类型不符， 仅能输入 1,2,3,4,5')
    .custom((value, { req }) => {
      if (value === 2 && isEmpty(req.body.hidden)) {
        throw new Error('当前menuType为菜单类型，需要传入hidden字段')
      }

      return true
    })
])

/**
 * 新增菜单
 */
router.post('/create', validator, createMenu)

router.delete('/delete', deleteMenu)

router.post('/update', validator, updateMenu)

/**
 * 查询菜单树-与角色无关
 */
router.get('/getMenuList', getMenuList)

/**
 * 用户详情-根据角色id查询权限树
 */
router.get(
  '/getPermissionByRoleId',
  validatorMiddleware([query('roleId').notEmpty().withMessage('角色Id不能为空')]),
  getPermissionByRoleId
)

/**
 * 登录场景-根据用户id（token）拿到用户的权限树
 * TODO: 后续应该是选择一个默认的店铺维度-店铺关联的权限再返回
 */
router.get('/getPermissionListByUserId', getPermissionListByUserId)

export default router
